// +----------------------------------------------------------------------
// | 小蚂蚁云企业级开发框架 [ 赋能开发者，助力企业发展 ]
// +----------------------------------------------------------------------
// | 版权所有 2022~2024 小蚂蚁团队
// +----------------------------------------------------------------------
// | Licensed Apache-2.0 【小蚂蚁云】并不是自由软件，未经许可禁止去掉相关版权
// +----------------------------------------------------------------------
// | 官方网站: https://www.xiaomayicloud.com
// +----------------------------------------------------------------------
// | 软件作者: @小蚂蚁团队 团队荣誉出品
// +----------------------------------------------------------------------
// | 版权和免责声明:
// | 本团队对该软件框架产品拥有知识产权（包括但不限于商标权、专利权、著作权、商业秘密等）
// | 均受到相关法律法规的保护，任何个人、组织和单位不得在未经本团队书面授权的情况下对所授权
// | 软件框架产品本身申请相关的知识产权，被授权主体务必妥善保管官方所授权的软件产品源码，禁
// | 止以任何形式对外泄露(包括但不限于分享、开源、网络平台),禁止用于任何违法、侵害他人合法
// | 权益等恶意的行为，禁止用于任何违反我国法律法规的一切项目研发，任何个人、组织和单位用于
// | 项目研发而产生的任何意外、疏忽、合约毁坏、诽谤、版权或知识产权侵犯及其造成的损失 (包括
// | 但不限于直接、间接、附带或衍生的损失等)，本团队不承担任何法律责任，本软件框架禁止任何
// | 单位、组织、个人用于任何违法、侵害他人合法利益等恶意的行为，如有发现违规、违法的犯罪行
// | 为，本团队将无条件配合公安机关调查取证同时保留一切以法律手段起诉的权利，本软件框架只能
// | 用于公司和个人内部的法律所允许的合法合规的软件产品研发，详细声明内容请阅读《框架免责声
// | 明》附件；
// +----------------------------------------------------------------------

package com.alibaba.nacos;

import com.alibaba.nacos.console.config.NacosConfig;
import com.alibaba.nacos.sys.filter.NacosTypeExcludeFilter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.AutoConfigurationExcludeFilter;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.scheduling.annotation.EnableScheduling;

/**
 * <p>
 * nacos应用服务
 * </p>
 *
 * @author 小蚂蚁团队
 * @since 2023-06-12
 */
@ComponentScan(basePackages = "com.alibaba.nacos", excludeFilters = {
        @ComponentScan.Filter(type = FilterType.CUSTOM, classes = {NacosTypeExcludeFilter.class}),
        @ComponentScan.Filter(type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class}),
        @ComponentScan.Filter(type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class})})
@ServletComponentScan
@EnableScheduling
public class NacosApplication {

    /**
     * 应用程序启动入口
     *
     * @param args 参数
     */
    public static void main(String[] args) {
        // 启动模式：true-单机模式，false-集群模式
        // 特别说明如下：
        // 1、集群模式下需要配置文件支持
        // 2、分别在所有 nacos 目录下创建 conf/cluster.conf 配置文件用于编写集群IP端口,详情请查阅官方文档
        System.setProperty(NacosConfig.NACOS_STANDALONE_MODE, "true");
        // 开启鉴权认证：true-开启登录认证，false-关闭登录认证
        System.setProperty(NacosConfig.NACOS_AUTH_ENABLED, "true");
        // 权限缓存开关,开启后权限缓存的更新默认有15秒的延迟,默认false
        System.setProperty(NacosConfig.NACOS_AUTH_CACHE_ENABLED, "true");
        // 开启日志：true-开启日志，false-关闭日志
        System.setProperty(NacosConfig.NACOS_LOG_ENABLED, "false");
        // 日志目录，注意Docker容器部署时需要设置挂载目录映射出去
        System.setProperty(NacosConfig.NACOS_LOG_BASEDIR, "logs");
        // 设置Nacos访问上下文前缀,默认nacos
        System.setProperty(NacosConfig.NACOS_CONTEXT_PATH, "/nacos");
        // 启动应用
        SpringApplication.run(NacosApplication.class, args);
        System.out.println("(♥◠‿◠)ﾉﾞ  小蚂蚁云【nacos服务】启动成功   ლ(´ڡ`ლ)ﾞ");
    }

}